package com.zhongge.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhongge.entity.Student;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhongge.vo.StudentVO;
import org.apache.ibatis.annotations.Param;

/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author zhongge
 * @since 2025-11-09
 */
public interface StudentMapper extends BaseMapper<Student> {
    //学生表的操作这个里面已经涉及了基本的增删改查
    //我们只需要添加复杂的sql即可
    //首先  学生表 和 班级表 和 辅导员表的关系：
    /**
     * 辅导员带哪一个班级？这个班级里面有多少学生？
     * 已知的是班级的id ==》求出班级中的所有学生(每一个学生信息包含班级信息)
     * 记住：学生-班级是 多对一  而我们现在学生表中操作，所以主角是学生(多)
     */

    /**
     * 分页查询学生信息（包含班级名称）
     * @param page 分页参数
     * @param name 学生姓名（可选）
     * @param studentNumber 学号（可选）
     * @param classId 班级ID（可选）
     * @return 分页结果
     *
     * 注意：@Param("name")这里使用@Param注解是因为后面我们
     * 做sql判断的时候可以通过制定的名字 否则就是默认param0了
     */
    IPage<StudentVO> selectStudentPage( Page<StudentVO> page,
                                        @Param("name") String name,
                                        @Param("studentNumber") String studentNumber,
                                        @Param("classId") Long classId);

    /**
     * 根据学号查询学生信息（包含班级名称）
     * @param studentNumber 学号
     * @return 学生信息
     */
    //StudentVO selectByStudentNumber(String studentNumber);

    /**
     * 根据ID查询学生信息（包含班级名称）
     * @param id 学生ID
     * @return 学生信息
     */
    //StudentVO selectStudentById(Integer id);

    /**
     * 根据班级id查询班级信息
     * @param id
     * @return
     */
    IPage<StudentVO> getStudentByClassID(Page<StudentVO> page, @Param("classId") Integer id);

}
